from datetime import datetime, timedelta
from typing import Dict, Any, List, Optional
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.schema import BaseOutputParser
from langchain_community.chat_models import ChatOpenAI
from langgraph.graph import StateGraph, END
from langchain.tools import tool
from langchain.agents import Tool
import re

# 阶段一：基础对话系统
class DateOutputParser(BaseOutputParser):
    """解析日期相关查询的输出解析器"""

    def parse(self, text: str) -> str:
        # 提取日期信息
        today = datetime.now().date()
        yesterday = today - timedelta(days=1)

        # 简单的日期替换逻辑
        if "昨天" in text:
            return f"您指的是 {yesterday.strftime('%Y年%m月%d日')} 的订单吗？"
        elif "今天" in text:
            return f"您指的是 {today.strftime('%Y年%m月%d日')} 的订单吗？"
        else:
            return "我理解您想查询订单，请提供更具体的时间信息。"

class BasicConversationSystem:
    """基础对话系统"""

    def __init__(self):
        self.llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")

        self.prompt = PromptTemplate(
            input_variables=["input"],
            template="""
            你是一个客服助手，需要处理用户的日期相关查询。
            当前时间: {current_time}

            用户输入: {input}

            请根据当前时间推断用户提到的相对日期，并给出友好的回应。
            """
        )

        self.chain = LLMChain(
            llm=self.llm,
            prompt=self.prompt,
            output_parser=DateOutputParser()
        )

    def respond(self, user_input: str) -> str:
